#!/usr/bin/env python

import servers
import MySQLdb
import MySQLdb.cursors
from decimal import Decimal

host=servers.host
user=servers.user
passwd=servers.passwd
db_name=servers.db_name

miBD=MySQLdb.connect(host=host,user=user,passwd=passwd,db=db_name)
miCursor=miBD.cursor()
miBDDict=MySQLdb.connect(host=host,user=user,passwd=passwd,db=db_name, cursorclass=MySQLdb.cursors.DictCursor)
miCursorDict=miBDDict.cursor()
midb=MySQLdb.connect(host=host,user=user,passwd=passwd,db=db_name)
micursor=midb.cursor()

def ordenCruda(consultaSQL):
    miCursor.execute(consultaSQL)
    auxiliar = miCursor.fetchall()
    return auxiliar

def ordenCrudaDict(consultaSQL, previo="SELECT 1"):
    miCursorDict.execute(previo)
    miCursorDict.execute(consultaSQL)
    auxiliar = miCursorDict.fetchall()    
    return auxiliar

def executa(sql):
    micursor.execute(sql)
    ultimoid = midb.insert_id()
    micursor.execute("set autocommit = 1")
    return ultimoid

# *****************************************************************************

def agregarCampoMP2():
    sql = "ALTER TABLE `vtas_ctasctes` ADD `mp2` DECIMAL( 10, 2 ) NULL DEFAULT '0.00';"
    try:
        resultado = executa(sql)
        print "Campo creado 'mp2' en la tabla vtas_ctasctes"
    except:
        print "Campo ya existente en la tabla vtas_ctasctes"

def obtenerMontosPagados():
    sql = "SELECT idventa,sum(montopagado) as pagado FROM vtas_ctasctestienepagos GROUP BY idventa"
    listaPagado = ordenCrudaDict(sql)
    if listaPagado == (): return None
    return listaPagado

def obtenerVtas_CtasCtes(idventa):
    sql = "SELECT idventa,cuota,montocuota FROM vtas_ctasctes WHERE idventa='%s' ORDER BY cuota" % (idventa)
    listaCuotas = ordenCrudaDict(sql)
    if listaCuotas == (): return None
    return listaCuotas

def procesarCorreccion():
    agregarCampoMP2()
    
    listaPagado = obtenerMontosPagados()
    if listaPagado == None: return None

    for pago in listaPagado:
        idventa = pago['idventa']
        remanente = pago['pagado']
        listaCuota = obtenerVtas_CtasCtes(idventa)
        if listaCuota == None:
            print "Error al procesar idventa: %s" % (idventa)
            continue

        for cuota in listaCuota:
            nrocuota = cuota['cuota']
            montocuota = cuota['montocuota']

            aPagar = min(remanente,montocuota)
            remanente -= aPagar
            
            sql = "UPDATE vtas_ctasctes SET mp2 = '%s' WHERE cuota='%s' AND idventa='%s'" % (aPagar,nrocuota,idventa)
            resultado = executa(sql)
            
    return 0

# *****************************************************************************

if __name__ == '__main__':


    resultado = procesarCorreccion()
    if resultado == None:
        print "La operacion no pudo realizarse"

    miCursor.close()
    miBD.close()
    micursor.close()
    